﻿using System;
using System.Collections.Specialized;
using System.Web;
using System.Configuration;
using DotNetOpenAuth.OpenId;
using DotNetOpenAuth.OpenId.RelyingParty;


namespace MasoQna.Infrastructure.Auth
{
    public class GoogleRelyingParty : IAuthHandler
    {
        public void StartAuthentication()
        {
            var b = new UriBuilder(HttpContext.Current.Request.Url) { Query = "" };
            
            //googleRealm에는 우리 사이트의 이름이 들어갑니다. 대개의 경우 baseUrl이 들어갑니다. 
            //이 baseUrl이 바뀔 경우 얻게 되는 userId값도 바뀌기 때문에 함부로 바꾸면 안 됩니다. 

            //baseUrl: https://www.abcd.com/accounts?ab=1211 라는 주소가 있을 때
            //https://www.abcd.com/ 까지를 baseUrl이라고 합니다. 
            var req = openid.CreateRequest("https://www.google.com/accounts/o8/id", 
                ConfigurationManager.AppSettings["googleRealm"], b.Uri);
            req.RedirectToProvider();
        }

        public bool FinishAuthenticaiton(out string providedUserId)
        {
            providedUserId = "";
            
            OpenIdRelyingParty openid = new OpenIdRelyingParty();
            var str = openid.GetResponse();

            if (str != null && str.Status.Equals(AuthenticationStatus.Authenticated))
            {
                Uri uri = new Uri(str.ClaimedIdentifier.ToString());
                NameValueCollection queries = HttpUtility.ParseQueryString(uri.Query);
                providedUserId = queries["id"];
                return true;
            }

            return false;
        }

        public GoogleRelyingParty()
        {
            imagePath = "/Content/image/google.png";
        }


        public string ImagePath
        {
            get { return imagePath; }
        }

        private string imagePath;
        private static OpenIdRelyingParty openid = new OpenIdRelyingParty();
    }
}